// 进行axios请求库的简单封装
// 导入axios模块
import axios from 'axios'
import { getUser } from '@/store'
import JSONbig from 'json-bigint'

// 配置接口主URL 生成实例
// 按照我们传入的参数创建一个实例出来
// request就是配置了baseUrl的axios实例
const request = axios.create({
  // 当前项目的所有接口都是以这个地址开头的
  baseURL: 'http://ttapi.research.itcast.cn/',
  //所有使用到axios请求的地方都会被控制到
  //不管是JSON.parse 还是JSONbig.parse 处理json串对于数据格式要求非常严格
  //try catch -> 做容错处理  JSON.parse  async  await
  transformResponse: [function (data) {
    //data 当前接口返回的未经过处理的json字符串
    //使用JSONbig替代默认的JSON.parse处理数据
    try {
      let hadTransData = JSONbig.parse(data)
      //将处理之后的数据返回
      return hadTransData
    } catch (error) {
      console.log('JSONbig转换出错了' + error)
      //将未处理之前的data数据返回
      return data
    }
  }]
})

//增加全局请求拦截进行token设置
//整个结构axios封装好的  
request.interceptors.request.use((config) => {
  //请求发起之前设置一些自定义的属性
  //cofig是个对象  代表当前的请求头对象  通过config.headers可以设置自定义的请求头
  //如果本地已经存在token值就设置到请求头中  如果本地不存在就将config对象原样返回
  let userInfo = getUser()
  if (userInfo && userInfo.token) {
    config.headers.Authorization = `Bearer ${userInfo.token}`
  }
  return config
}, (error) => {
  // Do something with request error
  return Promise.reject(error)
})

// 由于别的模块需要用到axios 所以需要导出实例
// 这里是默认导出
export default request

// 一般导出
// export const request = axios.create({
//     // 当前项目的所有接口都是以这个地址开头的
//     baseURL: 'http://ttapi.research.itcast.cn/'
// })
